package com.common.model.vo.page;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页结果VO（Value Object）
 * 用于统一封装「分页查询」的返回结果，包含分页元信息和当前页数据，方便前端统一处理
 * 实现Serializable接口：支持对象序列化，可用于网络传输（如接口返回）或缓存存储
 *
 * @param <T> 泛型参数：当前页数据列表的数据类型（适配不同业务场景，如用户列表、订单列表等）
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageList<T> implements java.io.Serializable {

    private static final long serialVersionUID = 1L; // 序列化版本号：保证序列化/反序列化兼容性

    /**
     * 当前页码
     * 示例：第1页传1，第2页传2，以此类推
     */
    private Long pageNum;

    /**
     * 每页显示条数
     * 示例：每页显示10条数据则传10，控制单页数据量
     */
    private Long pageSize;

    /**
     * 总页数
     * 由分页工具计算得出（公式：总条数 ÷ 每页条数，向上取整）
     * 示例：总数据7条、每页3条，则总页数=3
     */
    private Long totalPage;

    /**
     * 数据总条数
     * 即符合查询条件的所有数据总数（非当前页条数）
     * 示例：查询所有用户共100人，则totalCount=100
     */
    private Long totalCount;

    /**
     * 当前页数据列表
     * 存储分页截取后的当前页数据，泛型T适配不同业务实体（如User、Order等）
     * 初始化默认空列表：避免返回null，减少前端空指针处理成本
     */
    private List<T> dataList = new ArrayList<>();
}
